package cl.tinet.trainee.tarea6;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

public class UsuarioDao implements UsuarioDaoInterfaz {

	private EntityManager em;

	public UsuarioDao(EntityManager em) {
		super();
		this.em = em;
	}

	/**
	 * Agregar usuario especifico a la BD.
	 */
	public void agregarUsuario(Usuario usuario) {
		em.persist(usuario);
	}

	/**
	 * Proceder a modificar los datos de un usuario especifico.
	 */
	public void modificarUsuario(Usuario usuario) {
		em.persist(usuario);
	}

	/**
	 * Borrar un usuario especifico de la BD.
	 */
	public void borrarUsuario(Usuario usuario) {
		em.remove(usuario);
	}

	public List<Usuario> buscarListaUsuarios(Usuario datosUsuarios) {
		String sql = "SELECT u from Usuario u";
		if (datosUsuarios.getUsername() != null) {
			sql += " Where u.username=:username ";
		}
		Query q = em.createQuery(sql);
		if (datosUsuarios.getUsername() != null) {
			q.setParameter("username", datosUsuarios.getUsername());
		}
		List<Usuario> listaUsuarios = q.getResultList();
		return listaUsuarios;
	}

	/**
	 * Metodo que verifica si el usuario que se esta ingresando ya existe en la
	 * BD
	 */
	public Usuario buscarUsuarioAntesDeCrear(Usuario datosUsuario) {
		Usuario usuario;
		try {
			usuario = buscarUsuario(datosUsuario);
		} catch (NoResultException e) {
			// e.printStackTrace();
			return null;
		}
		return usuario;
	}

	/**
	 * Metodo que busca un usuario utilizado con las acciones de modificar o
	 * eliminar.
	 */
	public Usuario buscarUsuario(Usuario datosUsuario) {
		Usuario usuario;
		usuario = null;
		String sql = "SELECT u from Usuario u where u.username=:username";
		Query q = em.createQuery(sql);
		q.setParameter("username", datosUsuario.getUsername());
		usuario = (Usuario) q.getSingleResult();
		return usuario;
	}

}
